import vnode from './vnode'
import createElement from './createElement'
import patchVnode from './patchVnode';

export default function(oldVnode, newVnode) {
    // 判断传入的第一个参数是DOM节点还是 虚拟节点
    if (oldVnode.sel == '' || oldVnode.sel === undefined) {
        // 说明oldVnode是DOM节点，此时要包装成虚拟节点
        oldVnode = vnode(
            oldVnode.tagName.toLowerCase(), // sel
            {}, // data
            [], // children
            undefined, // text
            oldVnode // elm
        );
    }
    // 判断oldVnode和newVnode是不是同一个节点（key相同，并且选择器相同）
    if (oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel) {
        console.log('是同一个节点，需要精细化比较');
        patchVnode(oldVnode, newVnode);
    } else {
        console.log('不是同一个节点，暴力 插入新节点，删除旧节点');
        // 创建新虚拟节点 为DOM 节点
        // 要操作DOM ，所以都要转换为DOM节点
        let newVnodeElm = createElement(newVnode);
        let oldVnodeElm = oldVnode.elm;
        // 插入新节点到 旧节点之前
        if (newVnodeElm) {
            oldVnodeElm.parentNode.insertBefore(newVnodeElm, oldVnodeElm);
        }
        // 删除旧节点
        oldVnodeElm.parentNode.removeChild(oldVnodeElm);
    }
}